#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
int qpow(int a,int b){
    int r=1;
    while(b){
        if(b&1)r=1ll*r*a%mod;
        a=1ll*a*a%mod;
        b>>=1;
    }
    return r;
}
struct mat{
    int a[4][4];
}g,gg,g0,g1;
mat operator * (const mat &a,const mat &b){
    mat c;
    for(int i=0;i<4;i++){
        for(int j=0;j<4;j++){
            ll r=0;
            for(int k=0;k<4;k++)
                r+=1ll*a.a[i][k]*b.a[k][j];
            c.a[i][j]=r%mod;
        }
    }
    return c;
}
mat mqpow(mat a,int b){
    mat r=gg;
    while(b){
        if(b&1)r=r*a;
        a=a*a;
        b>>=1;
    }
    return r;
}
const int M=100010;
int n,m,x;
char y[M];
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    freopen("pearl.in","r",stdin);
    freopen("pearl.out","w",stdout);
    cin>>n>>m>>x;
    cin>>y+1;
    int ans=0,mul=qpow(2,n-1),res0=1,res1=0;
    for(int i=0;i<4;i++)
        for(int j=0;j<4;j++)
            g.a[i][j]=g0.a[i][j]=g1.a[i][j]=0,gg.a[i][j]=(i==j);
    g.a[0][0]=g.a[0][1]=g.a[1][0]=g.a[1][3]=g.a[2][2]=g.a[2][3]=g.a[3][1]=g.a[3][2]=1;
    g0.a[0][0]=g0.a[1][0]=g0.a[2][2]=g0.a[3][2]=1;
    g1.a[0][1]=g1.a[1][3]=g1.a[2][3]=g1.a[3][1]=1;
    for(int i=1;i<=m;i++){
        mat f=gg;
        f=f*mqpow(g,x-1);
        if(y[i]=='0')f=f*g0;
        else f=f*g1;
        f=f*mqpow(g,n-x);
        int now0=(f.a[0][0]+f.a[0][1])%mod,now1=(f.a[0][2]+f.a[0][3])%mod;
        int nxt0=(1ll*res0*now0+1ll*res1*now1)%mod,nxt1=(1ll*res0*now1+1ll*res1*now0)%mod;
        res0=nxt0,res1=nxt1;
        ans=(ans+1ll*qpow(2,i-1)*qpow(mul,m-i)%mod*res1)%mod;
    }
    cout<<ans;
    return 0;
}
